﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using BookStore.Solution.Entities;
using BookStore.Solution.Configurations;
namespace BookStore.Solution.BLL
{
    public class AuthorManager
    {
        private string result = "";
        private DataTable generateTable()
        {
            DataTable dtAuthor = new DataTable();
            dtAuthor.Columns.Add("AuthorID", typeof(string));
            dtAuthor.Columns.Add("AuthorName", typeof(string));
            dtAuthor.Columns.Add("Birth", typeof(int));
            dtAuthor.Columns.Add("Dead", typeof(int));
            dtAuthor.Columns.Add("Description", typeof(string));
            return dtAuthor;
        }
        public string Insert(Author t)
        {
            //Hàm xử lý thêm tác giả.
            using (var context = new BookStoreEntities())
            {
                context.Authors.Add(t);
                if (context.SaveChanges() > 0)
                {
                    SystemLogManager.Insert("Thêm tác giả: " + t);
                    result = "Thêm thành công";
                }
                else
                    result = "Thêm thất bại";

            }
            return result;
        }

        public string Update(Author t)
        {
            using (var context = new BookStoreEntities())
            {
                Author au = (from a in context.Authors
                             where a.AuthorID == t.AuthorID
                             select a).First();
                au.AuthorName = t.AuthorName;
                au.Birth = t.Birth;
                au.Dead = t.Dead;
                au.Description = t.Description;
                if (context.SaveChanges() > 0)
                {
                    SystemLogManager.Insert("Cập nhật tác giả: " + t);
                    result = "Cập nhật thông tin tác giả thành công";
                }
                else
                    result = "Cập nhật thông tin tác giả thất bại";
            }
            return result;
        }

        public string Delete(Author t)
        {
            using (var context = new BookStoreEntities())
            {
                Author au = (from a in context.Authors
                             where a.AuthorID == t.AuthorID
                             select a).First();
                au.Status = "Đã xóa";
                if (context.SaveChanges() > 0)
                {
                    SystemLogManager.Insert("Xóa tác giả: " + t);
                    result = "Xóa thông tin tác giả thành công";
                }
                else
                    result = "Xóa thông tin tác giả thất bại";
            }
            return result;
        }

        public DataTable SearchbyID(string ID)
        {
            DataTable dtAuthor = generateTable();
            using (var context = new BookStoreEntities())
            {
                var listAuthor = from a in context.Authors where a.AuthorID == ID select a;
                foreach (var row in listAuthor)
                {
                    dtAuthor.LoadDataRow(new object[] { row.AuthorID, row.AuthorName, row.Birth, row.Dead, row.Description }, false);
                }
            }
            return dtAuthor;
        }

        public DataTable SearchbyName(string Name)
        {
            DataTable dtAuthor = generateTable();
            using (var context = new BookStoreEntities())
            {
                var listAuthor = from a in context.Authors where a.AuthorName.Contains(Name) select a;
                foreach (var row in listAuthor)
                {
                    dtAuthor.LoadDataRow(new object[] { row.AuthorID, row.AuthorName, row.Birth, row.Dead, row.Description }, false);
                }
            }
            return dtAuthor;
        }

        public DataTable GetAll()
        {
            DataTable dtAuthor = new DataTable();
            dtAuthor.Columns.Add("AuthorID", typeof(string));
            dtAuthor.Columns.Add("AuthorName", typeof(string));
            dtAuthor.Columns.Add("Birth", typeof(int));
            dtAuthor.Columns.Add("Dead", typeof(int));
            dtAuthor.Columns.Add("Description", typeof(string));

            using (var context = new BookStoreEntities())
            {
                var listAuthor = from a in context.Authors where a.Status == "Khả dụng" select a;
                foreach (var row in listAuthor)
                {
                    dtAuthor.LoadDataRow(new object[] { row.AuthorID, row.AuthorName, row.Birth, row.Dead, row.Description }, false);
                }
            }
            return dtAuthor;
        }

        public Author GetDetail(string ID)
        {
            Author author = null;
            using (var context = new BookStoreEntities())
            {
                try
                {
                    author = context.Authors.Where(a => a.AuthorID == ID).FirstOrDefault<Author>();
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
            return author;
        }

    }
}
